package com.shrcl.engineerprocess.domain;

import com.shrcl.engineerprocess.domain.Engineer;
import com.shrcl.engineerprocess.domain.EngineerProject;
import com.shrcl.engineerprocess.domain.EngineerProjectAssignment;
import com.shrcl.engineerprocess.domain.EngineerProjectJobStatus;
import com.shrcl.engineerprocess.domain.EngineerWorkOrder;
import com.shrcl.engineerprocess.domain.impl.EngineerProjectJobImpl;
import com.shrcl.engineerprocess.domain.proxy.EngineerProjectJobProxy;
import edu.fudan.mylang.pf.EntityImplementation;
import edu.fudan.mylang.pf.IModelObject;
import java.util.Collection;
import java.util.Date;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;

@EntityImplementation(implementBy = EngineerProjectJobImpl.class)
public interface EngineerProjectJob extends IModelObject {
  public abstract String getJobName();
  
  public abstract EngineerProjectJob setJobName(final String jobName);
  
  public abstract Date getDate();
  
  public abstract EngineerProjectJob setDate(final Date date);
  
  public abstract String getSid();
  
  public abstract EngineerProjectJob setSid(final String sid);
  
  public abstract EngineerProject getEngineerProject();
  
  public abstract EngineerProjectJob setEngineerProject(final EngineerProject engineerProject);
  
  public abstract Collection<EngineerWorkOrder> getEngineerWorkOrders();
  
  public abstract EngineerWorkOrder createAndAddtoEngineerWorkOrders();
  
  public abstract EngineerWorkOrder createAndAddtoEngineerWorkOrders(final Procedure1<EngineerWorkOrder> updater);
  
  public abstract EngineerProjectJob removeFromEngineerWorkOrders(final EngineerWorkOrder engineerWorkOrder);
  
  public abstract EngineerProjectJob removeAllEngineerWorkOrders();
  
  public abstract Collection<EngineerProjectAssignment> getAllProjectAssignmentAssignments();
  
  public abstract EngineerWorkOrder findWorkOrder(final Engineer eng);
  
  public abstract boolean isAllTaskFinishedorCancelled();
  
  public abstract String getRCProjectName();
  
  public abstract String getRCProjectCode();
  
  public abstract EngineerProjectJobStatus getStatus();
  
  public abstract void start();
  
  public abstract void execute();
  
  public abstract EngineerWorkOrder createWorkOrder(final Procedure1<? super EngineerWorkOrder> init);
  
  public abstract void delWorkOrder(final EngineerWorkOrder engineerWorkOrder);
  
  public abstract void $workOrderFinish();
  
  public abstract void finish();
  
  public abstract Boolean isCreated();
  
  public abstract Boolean isExecuting();
  
  public abstract Boolean isFinished();
  
  public abstract Boolean isCancelled();
  
  public abstract EngineerProjectJobProxy toProxy();
}
